#pragma once

#ifndef _MyGame_h_
#define _MyGame_h_

#include "EnemyController.h"
#include "Hud.h"
#include "Player.h"
#include "Particles/ParticleSystem.h"
#include "Terrain/Terrain.h"
#include "Terrain/TreePlanter.h"
#include "Terrain/Water.h"
#include "../Framework/BoundingRectangle.h"
#include "../Framework/CameraType.h"
#include "../Framework/Game.h"
#include "../Framework/Label.h"
#include "../Framework/SkyBox.h"

namespace MyGame {

using namespace Framework;

class AfterBurnerClone :
            public Game {
public:
    AfterBurnerClone(void);
    ~AfterBurnerClone(void);
    EnemyController* GetEnemyController() const;
    ParticleSystem* GetParticleSystem() const;
    virtual void Draw(FLOAT timeDelta);
    virtual void Update(FLOAT timeDelta);
protected:
    virtual void Finalize();
    virtual void Initialize();
    virtual void LoadContent();
    virtual void UnloadContent();
private:
    CameraType cameraType;
    BoundingRectangle cameraBoundary;
    EnemyController* enemyController;
    Hud* hud;
    Player* player;
    BoundingRectangle jetBoundary;
    FLOAT keyTimeOut;
    Label* lblTimeEllapsed;
    ParticleSystem* particleSystem;
    SkyBox* skyBox;
    Camera* skyBoxCamera;
    IDirect3DTexture9* reflectionTexture;
    Terrain* terrain;
    TreePlanter* treePlanter;
    FLOAT time;
    Water* water;
    void DrawReflection(FLOAT timeDelta);
    void MoveCamera(FLOAT timeDelta);
    void MoveJet(FLOAT timeDelta);
    void SetCameraAngle(D3DCUBEMAP_FACES cubeMapFace, Camera* camera);
};

}

#endif